package org.patterns.creational.builder;


/**
 * 抽象的角色建造者类，用于构建游戏中的角色对象
 * 该类定义了一组创建角色不同部分的方法，如类型、性别、面部特征、服装和发型
 * 通过子类实现这些方法，可以创建各种不同配置的角色对象
 */
public abstract class ActorBuilder {
    // 正在构建的角色对象
    protected Actor actor = new Actor();

    /**
     * 构建角色的类型
     * 每个子类都需要实现该方法以定义具体的类型构建逻辑
     */
    public abstract void buildType();

    /**
     * 构建角色的性别
     * 每个子类都需要实现该方法以定义具体的性别构建逻辑
     */
    public abstract void buildSex();

    /**
     * 构建角色的面部特征
     * 每个子类都需要实现该方法以定义具体的面部特征构建逻辑
     */
    public abstract void buildFace();

    /**
     * 构建角色的服装
     * 每个子类都需要实现该方法以定义具体的服装构建逻辑
     */
    public abstract void buildCostume();

    /**
     * 构建角色的发型
     * 每个子类都需要实现该方法以定义具体的发型构建逻辑
     */
    public abstract void buildHairstyle();

    /**
     * 构建角色的是否是光头
     * 钩子方法，默认返回 false
     *
     * @return boolean 是否是光头
     */
    public boolean isBareheaded() {
        return false;
    }

    /**
     * 工厂方法，返回一个完整的游戏角色对象
     * 在调用此方法之前，应先调用其他build方法来配置角色
     *
     * @return Actor 完整配置的角色对象
     */
    public Actor createActor() {
        return actor;
    }
}
